"""
@Author:WKVugen
@Time:2023-07-04
@Description: 日志收集配置
"""
import logging
import os.path
from logging.handlers import TimedRotatingFileHandler
from utils.config import Config, LOG_PATH


class Logger(object):
    def __init__(self, logger_name='pySelenium'):
        self.logger = logging.getLogger(logger_name)
        # self.logger.setLevel(logging.DEBUG)
        logging.root.setLevel(logging.NOTSET)
        con = Config().get('log')
        """
            file_name: test.log      # 输出日志文件名
            backup: 5                # 备份名
            console_level: WARNING  # 控制台输出等级
            file_level: DEBUG       # 文件输出等级
            pattern: '%(asctime)s - %(name)s - %(levelname)s - %(message)s'  # 打印输出格式
        """
        self.log_file_name = con.get('file_name') if con and con.get('file_name') else 'test.log'  # 日志文件
        self.backup = con.get('backup') if con and con.get('backup') else 5  # 保留的日志数量
        self.console_level = con.get('console_level') if con and con.get('console_level') else 'INFO'  # 控制台日志级别
        self.file_level = con.get('file_level') if con and con.get('file_level') else 'DEBUG'  # 文件日志文件级别
        pattern = con.get('pattern') if con and con.get('pattern') else '%(asctime)s - %(name)s - %(levelname)s - %(message)s'  # 格式
        self.formatter = logging.Formatter(pattern)

    def get_logger(self):
        """在logger中添加日志句柄并返回，如果logger已有句柄，则直接返回
        我们这里添加两个句柄，一个输出日志到控制台，另一个输出到日志文件。
        两个句柄的日志级别不同，在配置文件中可设置。
        """
        if not self.logger.handlers:   # 为空则创建  否则直接返回
            console_handler = logging.StreamHandler()
            console_handler.setFormatter(self.formatter)
            console_handler.setLevel(self.console_level)
            self.logger.addHandler(console_handler)

            # 每天重新创建一个日志文件，最多保留backup份
            file_handler = TimedRotatingFileHandler(filename=os.path.join(LOG_PATH, self.log_file_name),
                                                    when='D', interval=1, backupCount=self.backup,
                                                    delay=True, encoding='utf-8')
            file_handler.setFormatter(self.formatter)
            file_handler.setLevel(self.file_level)
            self.logger.addHandler(file_handler)
        return self.logger

logger = Logger().get_logger()




if __name__ == '__main__':
    l = Logger()